create_table(name, options) 新增資料表
drop_table(name) 移除資料表
rename_table(old_name, new_name) 修改資料表名稱
change_table 修改資料表欄位
add_column(table, column, type, options) 新增一個欄位
rename_column(table, old_column_name, new_column_name) 修改欄位名稱
change_column(table, column, type, options) 修改欄位的型態(type)
remove_column(table , column) 移除欄位
add_index(table, columns, options) 新增索引
remove_index(table, index) 移除索引
options 可為空,或是:unique => true表示這是唯一。
add_foreign_key(from_table, to_table, options)
remove_foreign_key(from_table, to_table, options)
options 可為空,或是可自定:column => from_table_foreign_key_column (預設是{to_table}_id)和:primary_key => to_table_primary_key_column(預設是id)。
執行 rails g model 時,Rails就會順便新增對應的 Migration 檔案。以上一章產生的categories migration為例:
class CreateCategories < ActiveRecord::Migration[5.1]
def change
create_table :categories do |t|
t.string :name
t.integer :position
t.timestamps
end
add_column :events, :category_id, :integer
add_index :events, :category_id
end
end
其中的 timestamps 會建立叫做 created_at 和 updated_at 的時間欄位,這是Rails的常用慣例。它會自動設成資料新增的時間以及會後更新時間。
我們來試著新增一個欄位吧:
rails g migration add_description_to_categories
打開 db/migrate/20110411163049_add_description_to_categories.rb
class AddDescriptionToCategories < ActiveRecord::Migration[5.1]
def change
add_column :categories, :description, :text
end
end
完成後,執行 rails db:migrate便會實際在資料庫新增這個欄位。
[Rails 實戰聖經] https://ihower.tw/rails/migrations.html